package cn.iocoder.yudao.module.lowcode.service.naming;

import cn.iocoder.yudao.module.lowcode.core.naming.NamingConfigDO;
import cn.iocoder.yudao.module.lowcode.enums.NamingConventionEnum;

import java.util.List;
import java.util.Map;

/**
 * 命名配置服务接口
 *
 * @author 芋道源码
 */
public interface NamingConfigService {

    /**
     * 获取数据源的命名配置
     */
    NamingConfigDO getNamingConfig(Long dataSourceId, String tableName);

    /**
     * 获取数据库字段命名规则
     */
    NamingConventionEnum getDatabaseNamingConvention(Long dataSourceId, String tableName);

    /**
     * 获取前端接口命名规则
     */
    NamingConventionEnum getFrontendNamingConvention(Long dataSourceId, String tableName);

    /**
     * 智能检测表的字段命名格式
     */
    NamingConventionEnum detectTableNamingConvention(Long dataSourceId, String tableName, List<String> fieldNames);

    /**
     * 转换字段名：数据库格式 -> 前端格式
     */
    String convertDatabaseToFrontend(Long dataSourceId, String tableName, String fieldName);

    /**
     * 转换字段名：前端格式 -> 数据库格式
     */
    String convertFrontendToDatabase(Long dataSourceId, String tableName, String fieldName);

    /**
     * 批量转换Map中的字段名：数据库格式 -> 前端格式
     */
    Map<String, Object> convertMapDatabaseToFrontend(Long dataSourceId, String tableName, Map<String, Object> data);

    /**
     * 批量转换Map中的字段名：前端格式 -> 数据库格式
     */
    Map<String, Object> convertMapFrontendToDatabase(Long dataSourceId, String tableName, Map<String, Object> data);

    /**
     * 创建或更新命名配置
     */
    void saveNamingConfig(NamingConfigDO config);

    /**
     * 删除命名配置
     */
    void deleteNamingConfig(Long id);

    /**
     * 自动检测并创建命名配置
     */
    NamingConfigDO autoDetectAndCreateConfig(Long dataSourceId, String tableName, List<String> fieldNames);

    /**
     * 清空缓存
     */
    void clearCache();
}